home *** CD-ROM | disk | FTP | other *** search
- Program DESKTOP_PRG(Input,Output);
- Label
- 9999;
- Const
- ProgramTitle = 'DESKTOP.PRG (FreeWare) Version 1.01';
- ProgramInfo = ' (the DESKTOP.INF setup program)';
- Desktop = 'A:\DESKTOP.INF';
- DesktopLow = 'A:\DESKTOP.INL' { Also checkpresent uses 'L' };
- DesktopMed = 'A:\DESKTOP.INM' { Also checkpresent uses 'M' };
- DesktopHi = 'A:\DESKTOP.INH' { Also checkpresent uses 'H' };
- StringMax = 80;
- C_StringMax = 81;
- Type
- NameString = String[StringMax];
- DeskTopSet = Set Of 0..3;
- Var
- CurrentRes : Integer;
- CurrentInf : Integer;
- Answer : Integer;
- FromFile : NameString;
- Line : NameString;
- DeskPresent : DeskTopSet;
-
- Function CRawCIn:Long_Integer;
- GEMDOS(7);
-
- Function GetRez:Integer;
- XBIOS(4);
-
- Function Rename(FromFile,ToFile:NameString):Integer;
- Type
- FName = Packed Array[1..C_StringMax] Of Char;
- Var
- FFile : FName;
- TFile : FName;
- I, J : Integer;
-
- Function FRename(Dummy:Integer; Var OldName,NewName:FName):Integer;
- GEMDOS(86);
-
- Begin
- For I:=1 To Length(FromFile) Do Begin
- FFile[I]:=FromFile[I];
- End;
- FFile[Length(FromFile)+1]:=Chr(0);
- For I:=1 To Length(ToFile) Do Begin
- TFile[I]:=ToFile[I];
- End;
- TFile[Length(ToFile)+1]:=Chr(0);
- Rename:=FRename(J,FFile,TFile);
- End;
-
- Procedure OSS_Message;
- Begin
- Write(Output,Chr(27),'E') (* Clear Screen *);
- Writeln(Output,Chr(27),'Y ',ProgramTitle);
- Writeln(Output,ProgramInfo);
- Writeln(Output);
- Writeln(Output,' Portions of this product are');
- Writeln(Output,' Copyright © 1986, OSS and CCD.');
- Writeln(Output,' Used by Permission of OSS.');
- Writeln(Output);
- Writeln(Output,'Copyright © 1987, OIIHOB Computing');
- Writeln(Output,' 6557 Hokah Drive');
- Writeln(Output,' Lino Lakes, MN 55014');
- Writeln(Output,Chr(27),'Y. ');
- End;
-
- Procedure RenameDeskTop(FromFile, ToFile : NameString);
- Var
- Result : Integer;
- Begin
- Writeln(Output,Chr(27),'Y. ');
- Writeln(Output,'Renaming ',Desktop,' to be');
- Writeln(Output,' ',FromFile);
- Result:=Rename(Desktop,FromFile);
- If Result<>0 Then Begin
- Writeln(Output,' Returned ERROR CODE of: ',Result:0);
- End;
- Writeln(Output);
- Writeln(Output,'Renaming ',ToFile,' to be');
- Writeln(Output,' ',Desktop);
- Result:=Rename(ToFile,Desktop);
- If Result<>0 Then Begin
- Writeln(Output,' Returned ERROR CODE of: ',Result:0);
- End;
- Writeln(Output);
- End;
-
- Procedure CheckDesk(Var SetPresent:DeskTopSet);
- Type
- Path = Packed Array[1..80] Of Char;
- Name = Packed Array[1..14] Of Char;
- String80 = String[80];
- Entry = Packed Record
- Filler_1 : Packed Array[0..19] Of Byte;
- Filler_2 : Byte;
- Attribute : Byte;
- DirTime : Integer;
- DirDate : Integer;
- Length : Long_Integer;
- TheName : Name;
- End;
- Var
- SubDirectory : Path;
- SearchPath : Path;
- DTA_Buffer : Entry;
- FileName : Name;
- Drive : Integer;
- Temp : Integer;
- LTemp : Long_Integer;
- S : String80;
-
- Function DSetDrv(Drive:Integer):Long_Integer; GEMDOS($0E);
-
- Function DGetDrv:Integer; GEMDOS($19);
-
- Function FSetDTA(Var Buffer:Entry):Integer; GEMDOS($1A);
-
- Function DSetPath(Var Path_Buffer:Path):Integer; GEMDOS($3B);
-
- Function DGetPath(Var Path_Buffer:Path):Integer; GEMDOS($47);
-
- Function FSFirst(Var SearchMask:Path; Attr:Integer):Integer; GEMDOS($4E);
-
- Function FSNext:Integer; GEMDOS($4F);
-
- Procedure Assign(Var A:Path; S:String80);
- Var I:Integer;
- Begin
- For I:=1 to Length(S) Do
- A[I]:=S[I];
- For I:=Length(S)+1 To 80 Do
- A[I]:=' ';
- End;
-
- Begin
- SetPresent:=[];
- Drive:=DGetDrv;
- LTemp:=DSetDrv(0);
- Assign(SubDirectory,Chr(0));
- Temp:=DSetPath(SubDirectory);
- Temp:=FSetDTA(DTA_Buffer);
- Assign(SearchPath,'DESKTOP.IN?');
- DTA_Buffer.TheName:=' ';
- Temp:=FSFirst(SearchPath,0);
- While Temp=0 Do Begin
- With DTA_Buffer Do Begin
- Case TheName[11] Of
- 'L': SetPresent:=SetPresent+[0];
- 'M': SetPresent:=SetPresent+[1];
- 'H': SetPresent:=SetPresent+[2];
- 'F': SetPresent:=SetPresent+[3];
- Otherwise: ;
- End;
- TheName:=' ';
- End;
- Temp:=FSNext;
- End;
- LTemp:=DSetDrv(Drive);
- End;
-
- Function CurrentDeskInf:Integer;
- Var
- Desk : Text;
- C1, C2 : Char;
- I1, I2 : Integer;
- Line : NameString;
- Begin
- Reset(Desk,Desktop);
- Read(Desk,C1, C2);
- While Not ((C1='#') And (C2='E')) Do Begin
- Readln(Desk,Line);
- Read(Desk,C1,C2);
- End;
- While Desk^=' ' Do Get(Desk);
- While Desk^<>' ' Do Get(Desk);
- While Desk^=' ' Do Get(Desk);
- Read(Desk,C1,C2);
- If C1 in ['A'..'F'] Then
- I1:=Ord(C1)-Ord('A')+10;
- If C1 in ['a'..'f'] Then
- I1:=Ord(C1)-Ord('a')+10;
- If C1 in ['0'..'9'] Then
- I1:=Ord(C1)-Ord('0');
- If C2 in ['A'..'F'] Then
- I2:=Ord(C2)-Ord('A')+10;
- If C2 in ['a'..'f'] Then
- I2:=Ord(C2)-Ord('a')+10;
- If C2 in ['0'..'9'] Then
- I2:=Ord(C2)-Ord('0');
- CurrentDeskInf:=16*I1+I2-1;
- End;
-
- Function GetResolution:Integer;
- Const
- UpKey = $48;
- LeftKey = $4B;
- RightKey = $4D;
- DownKey = $50;
- EnterKey = $72;
- ReturnKey = $1C;
- SpaceBar = $39;
- MKey = $32;
- LKey = $26;
- Var
- Convert : Packed Record Case Integer Of
- 0: (L : Long_Integer);
- 1: (W : Packed Array[1..2] Of Integer);
- End;
- Continue : Boolean;
- Mode : Integer;
-
- Procedure DisplayModes;
- Begin
- Writeln(Output,Chr(27),'Y+ What is your desired screen resolution?');
- If Mode=0 Then
- Writeln(Output,Chr(27),'Y,)',Chr(27),'p LOW ',Chr(27),'q',
- Chr(27),'Y-) MEDIUM ')
- Else
- Writeln(Output,Chr(27),'Y,)',Chr(27),'q LOW ',
- Chr(27),'Y-)',Chr(27),'p MEDIUM ',Chr(27),'q');
- Writeln(Output);
- Writeln(Output);
- End;
-
- Begin
- Mode:=CurrentInf;
- If Mode=2 Then Begin
- Mode:=1;
- End;
- Continue:=True;
- While Continue Do Begin
- DisplayModes;
- Convert.L:=CRawCIn;
- Case Convert.W[1] Of
- EnterKey,
- ReturnKey: Continue:=False;
- UpKey,
- LeftKey,
- DownKey,
- RightKey,
- SpaceBar: Mode:=(Mode+1) Mod 2;
- LKey: Begin Mode:=0; DisplayModes; Continue:=False; End;
- MKey: Begin Mode:=1; DisplayModes; Continue:=False; End;
- Otherwise: Writeln(Output,Chr(7),Chr(7),Chr(7));
- End;
- End;
- GetResolution:=Mode;
- End;
-
- Procedure ErrorOff;
- Var
- Key : Long_Integer;
- Begin
- Writeln(Output,'Pausing due to error!');
- Writeln(Output,' Hit any key to coninue...');
- Key:=CRawCIn;
- Goto 9999;
- End;
-
- Procedure DoRenameDeskTop(FromFile, ToFile : NameString);
- Var
- Res : Integer;
- Begin
- If Not (Answer In DeskPresent) Then Begin
- Writeln(Output,'*ERROR your disk does not contain ',FromFile);
- Writeln(Output,' You will be booting without a DESKTOP.INF');
- Writeln(Output,' Please arrange desktop snd then save it!');
- ErrorOff;
- End;
- RenameDeskTop(FromFile,ToFile);
- End;
-
- Begin
- OSS_Message;
- CheckDesk(DeskPresent);
- If Not (3 In DeskPresent) Then Begin
- Writeln(Output,'*ERROR your disk does not contain');
- Writeln(Output,' DESKTOP.INF');
- ErrorOff;
- End;
- CurrentRes:=GetRez;
- CurrentInf:=CurrentDeskInf;
- Case CurrentInf Of
- 0: FromFile:=DesktopLow;
- 1: FromFile:=DesktopMed;
- 2: FromFile:=DesktopHi;
- Otherwise: FromFile:='A:\_-_-_-_-.INF';
- End;
- If DeskPresent = [0, 1, 2, 3] Then Begin
- Writeln(Output);
- Writeln(Output,'*ERROR you have the files of:');
- Writeln(Output,' DESKTOP.INF DESKTOP.INL');
- Writeln(Output,' DESKTOP.INM and DESKTOP.INH');
- Writeln(Output,'Therefore, renaming can not be performed.');
- Writeln(output);
- ErrorOff;
- End;
- If CurrentInf In DeskPresent Then Begin
- Writeln(Output);
- Writeln(Output,'*ERROR your DESKTOP.INF should be');
- Writeln(Output,' renamed to ',FromFile);
- Writeln(Output,' which exists on your disk!');
- Writeln(Output,'Therefore, renaming can not be performed.');
- Writeln(output);
- ErrorOff;
- End;
- Case CurrentRes Of
- 0,
- 1: Begin
- Answer:=GetResolution;
- If (Answer=0) And (CurrentInf<>0) Then Begin
- DoRenameDeskTop(FromFile, DeskTopLow);
- End;
- If (Answer=1) And (CurrentInf<>1) Then Begin
- DoRenameDeskTop(FromFile, DeskTopMed);
- End;
- End;
- 2: Begin
- Answer:=2;
- If CurrentInf<>2 Then Begin
- DoRenameDeskTop(FromFile, DeskTopHi);
- End;
- End;
- End;
- 9999: Writeln(Output,'End DESKTOP.PRG');
- End.
-